package com.sgb.goods.utils.helper;

import android.view.View;

import com.scwang.smart.refresh.layout.SmartRefreshLayout;
import com.scwang.smart.refresh.layout.constant.RefreshState;
import com.sgb.goods.utils.base.adapter.BaseCommonAdapter;

import java.util.List;

/**
 * SmartRefreshLayout helper
 * 处理统一的上拉下拉刷新视图变化
 * @author  cyj
 */
public interface SmartRefreshLayoutHelper {

    int LOAD_LIMIT = 10;

    /**
     * SmartRefreshLayout 刷新UI，一般是满足常用的，也可以重写达到某些自定义的逻辑
     * @param smartRefreshLayout    SmartRefreshLayout
     * @param adapter               adapter
     * @param data                  List
     */
    default void refreshUi(SmartRefreshLayout smartRefreshLayout, BaseCommonAdapter adapter, List data) {
        boolean dataIsNull = null == data || data.size() == 0;
        // 1.判断列表是否有数据，本次请求失败了。这样不做任何数据填充并取消刷新头尾。
        if(null != adapter && adapter.getData().size() > 0 && dataIsNull) {
            if(!RefreshState.Refreshing.equals(smartRefreshLayout.getState())) {
                // 上拉加载更多完成
                smartRefreshLayout.finishLoadMore(true);
            } else {
                // 下拉刷新完成
                smartRefreshLayout.finishRefresh(true);
            }
        }
        // 2.判断本次数据是否为空，为空则填充空视图与禁用加载更多功能。
        if(dataIsNull && null != adapter) {
            adapter.getEmptyView().setVisibility(View.VISIBLE);
            // 禁用加载更多
            smartRefreshLayout.setEnableLoadMore(false);
            // 下拉刷新完成
            smartRefreshLayout.finishRefresh(true);
            return;
        }
        // 3.判断本次数据是否小于限制大小值，小于则取消与禁用加载更多功能。
        if(!dataIsNull && data.size() < LOAD_LIMIT) {
            smartRefreshLayout.setNoMoreData(true);
            smartRefreshLayout.setEnableLoadMore(false);
        }
        // 4.处理正常列表数据加载
        if(!RefreshState.Refreshing.equals(smartRefreshLayout.getState())) {
            // 上拉加载更多完成并判断是否启用加载更多功能。
            smartRefreshLayout.finishLoadMore(true);
            smartRefreshLayout.setEnableLoadMore(null != data && data.size() != 0);
        } else {
            // 下拉刷新完成并判断是否启用加载更多功能。
            smartRefreshLayout.finishRefresh(true);
            smartRefreshLayout.setEnableLoadMore(dataIsNull || data.size() >= LOAD_LIMIT);
        }
    }
}
